#include "mainwindow.h"

#include <QApplication>
#include <QFileSystemWatcher>
#include <QMessageBox>
#include <QDir>
#include <QFileInfo>
#include <QPainter>

// 递归添加所有子目录到监视器
void addSubdirectoriesToWatcher(QFileSystemWatcher& watcher, const QString& dirPath, QSet<QString>& watchedDirs)
{
    QDir dir(dirPath);
    if (!dir.exists())
        return;

    // 如果这个目录还没有被监视，就添加它
    if (!watchedDirs.contains(dir.absolutePath()))
    {
        watcher.addPath(dir.absolutePath());
        watchedDirs.insert(dir.absolutePath());
    }

    // 递归添加子目录
    Q_FOREACH (QString subDir, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
    {
        addSubdirectoriesToWatcher(watcher, dir.absoluteFilePath(subDir), watchedDirs);
    }
}


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFileSystemWatcher watcher;
    QSet<QString> watchedDirs; //用来记录被监视的目录
    // 添加初始监视目录以及子目录
    addSubdirectoriesToWatcher(watcher,"C:\\phone",watchedDirs);

     //连接信号与槽
    QObject::connect(&watcher,&QFileSystemWatcher::directoryChanged,[&watcher,&watchedDirs](const QString& path){
        // 如果是目录变化，这里可以做一些额外的处理
        qDebug() << "文件" << path << "改变";

        // 重新添加目录及子目录，以防有新的子目录被创建
        addSubdirectoriesToWatcher(watcher,path,watchedDirs);
    });

    QObject::connect(&watcher,&QFileSystemWatcher::fileChanged,[&watcher](const QString& filepath){
        QFileInfo fileinfo(filepath);
        if(fileinfo.exists()){
            // 文件存在，可能是创建或修改
            QMessageBox::information(nullptr,"新建或修改文件",QString("文件 '%1' 创建或修改.").arg(fileinfo.fileName()));
        }else{
            // 文件不存在，可能被删除
            QMessageBox::information(nullptr,"文件被删除",QString("文件 '%1' 删除.").arg(fileinfo.fileName()));
        }

    });

    // 创建两个 QImage 对象
    QImage image1("D:\\Pictures\\001.PNG"); // 假设 image1.png 是第一个图像的文件路径
    QImage image2("D:\\Pictures\\002.PNG"); // 假设 image2.png 是第二个图像的文件路径

    // 创建一个 QWidget 作为绘图区域
    QWidget window;
    window.setWindowTitle("图像位置交换");
    window.resize(800, 600);

    // 创建一个 QPainter 对象用于绘制图像
    QPainter painter(&window);

    // 绘制第一个图像到指定位置 (x1, y1)
    painter.drawImage(0, 0, image1);

    // 绘制第二个图像到指定位置 (x2, y2)
    painter.drawImage(100, 100, image2);

    // 显示窗口
    window.show();


    MainWindow w;
    w.show();
    return a.exec();
}

